//package com.ruoyi.api.utils;
//
////package com.piespace.bdprotrol.utils;
//
//import com.piespace.bdprotrol.BDCommunicator.BdIntentData;
//import com.piespace.bdprotrol.BdSpecialCmd;
//import com.piespace.bdprotrol.utils.Logger;
//
//import java.lang.reflect.Field;
//import java.text.DecimalFormat;
//import java.text.SimpleDateFormat;
//import java.util.*;
//import java.util.Map.Entry;
//
////import android.text.TextUtils;
//
//public class BeidouUtils_Tran {
//
//    private static final String HEXSTR = "0123456789ABCDEF";
//    public static final String START_STR = "$";
//    // public static final String SYMBOL = "--";
//    public static final String SYMBOL_SEND = "CC"; // 终端发送用CC
//    public static final String SYMBOL_RECEVIED = "BD"; // 终端接收用BD
//    public static final String[] SYMBOL_ARR = {"BD","GP","GN","GL","GA","CC"};
//    // public static final String END_STR = "<CR><LF>";
//    public static final String END_STR = "\r\n";
//    public static final String STAR = "*";
//    private static final String TAG = "BeidouUtils";
//
//    public static Properties properties = new Properties();
//    static {
//        try {
//            properties.load(com.piespace.bdprotrol.utils.BeidouUtils.class.getClassLoader().getResourceAsStream("order.properties"));
//        } catch (Exception e) {
//            throw new RuntimeException("properties文件加载失败");
//        }
//    }
//
//    /***简单判断是否正确的北斗语句格式
//     */
//    public static boolean isValidBdCommand(String bdString){
//        if(getSubCount(START_STR,bdString)!=1 && getSubCount(STAR,bdString)!=1){ //多个*的情况或无*
//            int startIndex = getBdStrStartIndex(bdString);
//            if(startIndex<0){
//                return false;
//            }
//            String commStr = null;
//            try {
//                commStr = bdString.substring(startIndex + 3, startIndex + 6);
//            } catch (Exception e) {
//                return false;
//            }
//            if(getSubCount(STAR,bdString)==0&&commStr.equals("GSV")){  //GSV语句没有校验码的情况
//                return true;
//            }
//            Logger.getInstance().e(TAG, "inValid:"+bdString);
//            return false;
//        }
//        return true;
//
//    }
//
//    /**获取接收到的北斗语句标志的开始索引**/
//    public static int getBdStrStartIndex(String singleBdStr){
//        int startIndex = -1;
//        for(String symbol: SYMBOL_ARR){
//            startIndex = singleBdStr.indexOf(START_STR + symbol);
//            if(startIndex>-1){
//                break;
//            }
//        }
//        return startIndex;
//    }
//
//    /**子字符串在字符串中出现的次数**/
//    public static int getSubCount(String substr,String str){
//        int count = 0;
//        int start = 0;
//        while (str.indexOf(substr, start) >= 0 && start < str.length()) {
//            count++;
//            start = str.indexOf(substr, start) + substr.length();
//        }
//        return count;
//
//    }
//
//    /***
//     * 北斗报文转换为实体对象
//     * @param bdIntentData
//     *            报文
//     * @return
//     */
//    public static List<Object> beiDouToEntityList(BdIntentData bdIntentData) {
//        List<Object> objects = new ArrayList<Object>();
//        String bdString = bdIntentData.bdcmdstr;
//        if (BdSpecialCmd.isSpecialCmd(bdString)) { //特殊北斗指令
//            Object obj= BdSpecialCmd.parseSpecialCmdEntity(bdIntentData.bdcmdByte);
//            if(obj!=null){
//                objects.add(obj);
//                return objects;
//            }
//            return null;
//        } else { //普通格式协议指令
//            bdString = START_STR + bdString + START_STR;
//            String[] split = bdString.split("\\" + START_STR);
//
//            for (String subbd : split) {
//                if (subbd == null || "".equals(subbd)) {
//                    continue;
//                }
//                subbd = START_STR + subbd.trim();
//                Object obj = singleBeidouToEntity(subbd);
//                if (obj == null) {
//                    continue;
//                }
//                objects.add(obj);
//            }
//            return objects;
//        }
//    }
//
//
//    /***
//     * 北斗报文转换为实体对象
//     * @param bdString
//     *            报文
//     * @return
//     */
//    public static Object beiDouToEntity(String bdString) {
//        return singleBeidouToEntity(bdString);
//    }
//
//    /**单条北斗语句转化为实体**/
//    public static Object singleBeidouToEntity(String bdString){
//
//        if (!isValidBdCommand(bdString)) {
//            return null;
//        }
//        String order = null;
//        if (bdString.indexOf("GSV") > 0 && getSubCount(STAR,bdString)==0) {
//            order = "GSV";
//        } else {
//            order = getMsgOrder(bdString);// 获取北斗指令
//        }
//
//        if (order == null || "".equals(order)) {
//            return null;
//        }
//        String className = (String) properties.get(order);
//        if ("null".equals(className) || "".equals(className) || className == null) {
//            Logger.getInstance().e("BeidouUtils", order + " 指令没有找到对应的实体类。");
//            return null;
//        }
//
//        /*if (TextUtils.isEmpty(className)) {
//            Logger.getInstance().e("BeidouUtils", " 指令错误");
//            return null;
//            // throw new RuntimeException("指令错误");
//        }*/
//
//        if (getSubCount(STAR,bdString)> 0) {
//            if (!checkout(bdString)) {
//                Logger.getInstance().e("BeidouUtils", bdString + " 校验和错误");
//                return null;
//                // throw new RuntimeException("校验和错误");
//            }
//        }
//        Map<String, String> map = getParamsNameAndValue(className, bdString);
//        if (map == null) {
//            Logger.getInstance().e("BeidouUtils", " getParamsNameAndValue = null");
//            return null;
//        }
//
//        @SuppressWarnings("rawtypes")
//        Class clazz;
//        Object instance;
//        Field[] fields;
//        try {
//            clazz = Class.forName(className);
//            instance = clazz.newInstance();
//            fields = clazz.getDeclaredFields();
//        } catch (Exception e) {
//            // throw new RuntimeException("类型转换异常");
//            Logger.getInstance().e("BeidouUtils"," 类型转换异常");
//            return null;
//        }
//        for (int i = 0; i < fields.length; i++) {
//            if ("serialVersionUID".equals(fields[i].getName())) {
//                continue;
//            }
////			Logger.getInstance().e(TAG, fields[i].getName()+"");
//            String value = map.get(fields[i].getName());
//            Object objValue = new Object();
//            Class<?> type = fields[i].getType();
//            if (type == String.class) {
//                objValue = value;
//            } else if (type == int.class) {
//                try {
//                    objValue = Integer.parseInt(value);
//                } catch (Exception e) {
//                    //Logger.getInstance().e("Exception",e.getMessage().toString());
//                }
//            } else if (type == double.class) {
//                try {
//                    objValue = Double.parseDouble(value);
//                } catch (Exception e) {
//                    //Logger.getInstance().e("Exception",e.getMessage().toString());
//                }
//            } else if (type == char.class) {
//                try {
//                    objValue = value.toCharArray()[0];
//                } catch (Exception e) {
//                    //Logger.getInstance().e("Exception",e.getMessage().toString());
//                }
//            } else if (type == long.class) {
//                try {
//                    objValue = Long.parseLong(value);
//                } catch (Exception e) {
//                    //Logger.getInstance().e("Exception",e.getMessage().toString());
//                }
//            } else if (type == byte.class) {
//                try {
//                    objValue = Byte.parseByte(value);
//                } catch (Exception e) {
//                    //Logger.getInstance().e("Exception",e.getMessage().toString());
//                }
//            }
//            try {
//                fields[i].set(instance, objValue);
//            } catch (IllegalArgumentException e) {
//                //Logger.getInstance().e("Exception",e.getMessage().toString());
//            } catch (IllegalAccessException e) {
//                //Logger.getInstance().e("Exception",e.getMessage().toString());
//            }
//        }
//        return instance;
//    }
//
//
//    /***
//     * 功能:实体转换成北斗报文
//     *
//     * @param entity
//     * @return
//     */
//    public static String entityToBeidou(Object entity) {
//        String className = entity.getClass().getName();
//        LinkedList<String> classFieldNames = getClassFieldNames(className);
//        Set<Entry<Object, Object>> entrySet = properties.entrySet();
//        String order = "";
//        for (Entry<Object, Object> entry : entrySet) {
//            if (className.equals(entry.getValue())) {
//                order = (String) entry.getKey();// 获得指令
//                break;
//            }
//        }
//        /*if (TextUtils.isEmpty(order)) {
//            throw new RuntimeException("properties文件中没有此指令");
//        }*/
//        Field[] fields = entity.getClass().getDeclaredFields();// FIXME 此处字段不是有序的
//        StringBuffer buffer = new StringBuffer();
//        Map<String, Object> map = new HashMap<String, Object>();
//        for (int i = 0; i < fields.length; i++) {
//            try {
//                map.put(fields[i].getName(), fields[i].get(entity));
//            } catch (Exception e) {
//            }
//        }
//        LinkedList<String> lists = getAllOrderParamsValues(map, classFieldNames);
//        // buffer.append("--").append(order);
//        buffer.append(SYMBOL_SEND).append(order);
//        for (int i = 0; i < lists.size(); i++) {
//            buffer.append(",").append(lists.get(i));
//        }
//        String hh = getHH(buffer.toString());// 获取校验码
//        buffer.insert(0, START_STR);
//        buffer.append(STAR + hh + END_STR);
//        return buffer.toString();
//    }
//
//    /**
//     *
//     * 功能: 获取格式化后的数字
//     *
//     * @param number
//     *            整形数字
//     * @param pattern
//     *            数字正则表达式
//     * @return
//     * @author: YangKang
//     * @date:2014-8-19下午1:51:18
//     */
//    public static String getFormatNumber(int number, String pattern) {
//        DecimalFormat format = new DecimalFormat(pattern);
//        return format.format(number);
//    }
//
//    /***
//     *
//     * 功能:得到有序的entity的字段值
//     *
//     * @param map
//     * @param classFieldNames
//     * @return
//     * @author: YangKang
//     * @date:2014-8-18下午6:16:29
//     */
//    private static LinkedList<String> getAllOrderParamsValues(Map<String, Object> map, LinkedList<String> classFieldNames) {
//        LinkedList<String> lists = new LinkedList<String>();
//        if (classFieldNames != null && map != null) {
//            for (String fieldName : classFieldNames) {
//                lists.add(map.get(fieldName) + "");
//            }
//        }
//        return lists;
//    }
//
//    /***
//     *
//     * 功能: 封装entity的属性名和属性值
//     *
//     * @param className
//     *            entity的类名全称
//     * @param bdString
//     *            北斗短报文
//     * @return
//     * @author: YangKang
//     * @date:2014-8-18下午5:17:21
//     */
//    public static Map<String, String> getParamsNameAndValue(String className, String bdString) {
//        Map<String, String> map = null;
//        try {
//            map = new HashMap<String, String>();
//            LinkedList<String> listFieldNames = getClassFieldNames(className);
//            LinkedList<String> listFieldValues = new LinkedList<String>();
////			int startIndex = bdString.indexOf(START_STR + SYMBOL_RECEVIED);
//            int startIndex = getBdStrStartIndex(bdString);
//            if(startIndex<0){
//                return null;
//            }
//            int endIndex = bdString.indexOf(STAR);
////			int endIndex = bdString.lastIndexOf(STAR);
//            String[] split = null;
//            // 去掉如 "$CCTXA,1,2094957,2,,A41CBC10200064*44"中的$CC,并按","分割
//            if(bdString.indexOf("GSV")>0&&endIndex<0){
//                split = bdString.substring(startIndex + 3, bdString.length()-1).split(",");
//            }else{
//                split = bdString.substring(startIndex + 3, endIndex).split(",");
//            }
//
//            /**
//             * 通信电文内容字符串（ascii码）中可能包含有","，而","在此作为字符串分割符，存在问题 需要进一步大致处理，处理后可能还会有其他问题,特此标记。liangyong,2014-9-26
//             */
//            if ("TXA".equals(split[0]) || "TXR".equals(split[0])) {
//                // 循环中不处理最后一个字段
//                for (int i = 0; i < listFieldNames.size() - 1; i++) {
//                    int j = i + 1; // 跳过命令字符，如“TXA”，“TXR”
//                    listFieldValues.addLast(split[j]);
//                }
//
//                // 最后一个字段取值为剩下的所有字符
//                String mergeMsg = "";
//                for (int j = listFieldNames.size(); j < split.length; j++) {
//                    if (!"".equals(mergeMsg)) {
//                        mergeMsg = mergeMsg + "," + split[j]; // 还原被去掉的","号
//                    } else {
//                        mergeMsg = split[j];
//                    }
//                }
//                listFieldValues.addLast(mergeMsg);
//
//            } else {
//
////				for (int i = 0; i < split.length; i++) {
////					if (i != 0) { // 去掉指令名称，如 "TXR,1,2094957,2,,A41CBC10200064*44"，去掉TXR
////						listFieldValues.addLast(split[i]);
////					}
////				}
//                //int i = 1 去掉指令名称，如 "TXR,1,2094957,2,,A41CBC10200064*44"，去掉TXR
//                try {
//                    for (int i = 1; i < listFieldNames.size()+1; i++) {
//                        listFieldValues.addLast(split[i]);
//                    }
//                } catch (Exception e) {
//                    //Logger.getInstance().e("Exception",e.getMessage().toString());
//                }
//            }
//            for (int i = 0; i < listFieldValues.size(); i++) {
//                map.put(listFieldNames.get(i), listFieldValues.get(i));
//            }
//        } catch (Exception e) {
//            Logger.getInstance().e("Exception","err: className= ["+className+"] bdString=["+bdString+"]");
//            //Logger.getInstance().e("Exception",e.getMessage().toString());
//        }
//        return map;
//    }
//
//    /***
//     *
//     * 功能:通过全称类名，得到entity的所有属性名
//     *
//     * @param className
//     * @return
//     * @author: YangKang
//     * @date:2014-8-18下午5:40:04
//     */
//    private static LinkedList<String> getClassFieldNames(String className) {
//        LinkedList<String> lists = new LinkedList<String>();
//        if (className != null) {
//            if (className.endsWith("GgaEntity")) {
//                // if (className.equals("com.piespace.protocol.entity.LocationInfoEntity")) {
//                lists.addLast("strTime");
//                lists.addLast("strLat");
//                lists.addLast("chrLatDirection");
//                lists.addLast("strLon");
//                lists.addLast("chrLonDirection");
//                lists.addLast("strStatus");
//                lists.addLast("strSatelliteCount");
//                lists.addLast("dHDOP");
//                lists.addLast("dHeight");
//                lists.addLast("chrHeightUnit");
//                lists.addLast("dElevationException");
//                lists.addLast("chrElevationExceptionUnit");
//                lists.addLast("strAgeDifferenceData");
//                lists.addLast("strDifferenceStationID");
//                lists.addLast("dVDOP");
//            } else if (className.endsWith("SbxEntity")) {
//                // } else if (className.equals("com.piespace.protocol.entity.DeviceInfoEntity")) {
//                lists.addLast("strSupplierName");
//                lists.addLast("strDeviceType");
//                lists.addLast("dProgramVersion");
//                lists.addLast("dSerialPortVersion");
//                lists.addLast("dICDVersion");
//                lists.addLast("dDeviceSerialNo");
//                lists.addLast("dIDNumber");
//            } else if (className.endsWith("WaaEntity")) {
//                // } else if (className.equals("com.piespace.protocol.entity.LocationReportEntity")) {
//                lists.addLast("strMsgType");
//                lists.addLast("dReportFrequency");
//                lists.addLast("strUserAddress");
//                lists.addLast("strLocReportTime");
//                lists.addLast("strLat");
//                lists.addLast("chrLatDirection");
//                lists.addLast("strLon");
//                lists.addLast("chrLonDirection");
//                lists.addLast("dElevationValue");
//                lists.addLast("chrElevationValueUnit");
//            } else if (className.endsWith("TxaEntity")) {
//                // } else if (className.equals("com.piespace.protocol.entity.SetCommunicationApplyEntity")) {
//                lists.addLast("strUserAddress");
//                lists.addLast("strCommuType");
//                lists.addLast("strTransferMode");
//                lists.addLast("strCommuMsgContent");
//            } else if (className.endsWith("TxrEntity")) {
//                // } else if (className.equals("com.piespace.protocol.entity.CommunicationInfoEntity")) {
//                lists.addLast("strInfoType");
//                lists.addLast("strUserAddress");
//                lists.addLast("strMsgMode");
//                lists.addLast("strSendMsgTime");
//                lists.addLast("strCommuMsgContent");
//            } else if (className.endsWith("TxtEntity")) {
//                // } else if (className.equals("com.piespace.protocol.entity.TextInfoEntity")) {
//                lists.addLast("strStatementTotal");
//                lists.addLast("strStatementNumber");
//                lists.addLast("strTextID");
//                lists.addLast("strTextInfo");
//            } else if (className.endsWith("IcaEntity")) {
//                lists.addLast("strCommandType");
//                lists.addLast("strChildFrameId");
//            } else if (className.endsWith("IciEntity")) {
//                lists.addLast("strUserAddress");
//                lists.addLast("strSerialNo");
//                lists.addLast("strBroadcastAddress");
//                lists.addLast("strUserCV");
//                lists.addLast("strServiceFrequency");
//                lists.addLast("strCommuGrade");
//                lists.addLast("strEncryptFlag");
//                lists.addLast("strChildCount");
//            } else if (className.endsWith("JmsEntity")) {
//                lists.addLast("chrFlag");
//            } else if (className.endsWith("FkiEntity")) {
//                lists.addLast("strCommand");
//                lists.addLast("chrExecResult");
//                lists.addLast("chrFrequencyFlag");
//                lists.addLast("byteSendAllowFlag");
//                lists.addLast("strWaitTime");
//            } else if (className.endsWith("IcmEntity")) {
//                lists.addLast("strEndDate");
//            } else if (className.endsWith("ZtiEntity")) {
//                lists.addLast("bytePrmStatus");
//                lists.addLast("byteBdCardStatus");
//                lists.addLast("byteAntennaStatus");
//                lists.addLast("byteChannelStatus");
//                lists.addLast("bytePowerFlag");
//                lists.addLast("byteBatteryFlag");
//                lists.addLast("bytePerRemainEnergy");
//                lists.addLast("strTimeRemainEnergy");
//            } else if (className.endsWith("RmoEntity")) {
//                lists.addLast("strCommand");
//                lists.addLast("byteMode");
//                lists.addLast("fFrequency");
//            } else if (className.endsWith("WbaEntity")) {
//                lists.addLast("strUserAddress");
//                lists.addLast("chrAltitude");
//                lists.addLast("fAntennaHeight");
//                lists.addLast("fFrequency");
//            }else if (className.endsWith("DwrEntity")) {// 获取波束信息
//                lists.addLast("strLocType");
//                lists.addLast("strUserAddress");
//                lists.addLast("strTime");
//                lists.addLast("strLat");
//
//                lists.addLast("chrLatDirection");
//                lists.addLast("strLon");
//                lists.addLast("chrLonDirection");
//                lists.addLast("strHeight");
//
//                lists.addLast("chrHeightUnit");
//                lists.addLast("strElevationException");
//                lists.addLast("chrElevationExceptionUnit");
//                lists.addLast("strAccuracy");
//
//                lists.addLast("chrEmergencyLoc");
//                lists.addLast("chrMultiValue");
//                lists.addLast("chrAltitudeType");
//            }else if (className.endsWith("BsiEntity")) {
//                lists.addLast("intResponseBeam");
//                lists.addLast("intTimeDifferBeam");
//
//                lists.addLast("intBeam1Signal");
//                lists.addLast("intBeam2Signal");
//                lists.addLast("intBeam3Signal");
//                lists.addLast("intBeam4Signal");
//
//                lists.addLast("intBeam5Signal");
//                lists.addLast("intBeam6Signal");
//                lists.addLast("intBeam7Signal");
//                lists.addLast("intBeam8Signal");
//
//                lists.addLast("intBeam9Signal");
//                lists.addLast("intBeam10Signal");
//            }else if (className.endsWith("ZhsEntity")){
//                lists.addLast("strValue");
//            }else if (className.endsWith("BssEntity")){
//                lists.addLast("strResponseBeam");
//                lists.addLast("strTimeDifferBeam");
//            }else if (className.endsWith("GsvEntity")){
//                lists.addLast("packetCount");
//                lists.addLast("currPacketNo");
//                lists.addLast("visibleSatelliteNum");
//                lists.addLast("satelliteNo1");
//                lists.addLast("elevation1");
//                lists.addLast("azimuth1");
//                lists.addLast("SNR1");
//                lists.addLast("satelliteNo2");
//                lists.addLast("elevation2");
//                lists.addLast("azimuth2");
//                lists.addLast("SNR2");
//                lists.addLast("satelliteNo3");
//                lists.addLast("elevation3");
//                lists.addLast("azimuth3");
//                lists.addLast("SNR3");
//                lists.addLast("satelliteNo4");
//                lists.addLast("elevation4");
//                lists.addLast("azimuth4");
//                lists.addLast("SNR4");
//            }else if (className.endsWith("GsaEntity")){
//                lists.addLast("mode");
//                lists.addLast("selectMode");
//                lists.addLast("satelliteNo1");
//                lists.addLast("satelliteNo2");
//                lists.addLast("satelliteNo3");
//                lists.addLast("satelliteNo4");
//                lists.addLast("satelliteNo5");
//                lists.addLast("satelliteNo6");
//                lists.addLast("satelliteNo7");
//                lists.addLast("satelliteNo8");
//                lists.addLast("satelliteNo9");
//                lists.addLast("satelliteNo10");
//                lists.addLast("satelliteNo11");
//                lists.addLast("satelliteNo12");
//                lists.addLast("PDOP");
//                lists.addLast("HDOP");
//                lists.addLast("VDOP");
//                lists.addLast("TDOP");
//            }else if (className.endsWith("EcsEntity")){
//                lists.addLast("pindianNo");
//                lists.addLast("channel");
//                lists.addLast("subRd");
//            }else if (className.endsWith("EctEntity")){
//                lists.addLast("satelliteNo");
//                lists.addLast("pindianNo");
//                lists.addLast("channel");
//                lists.addLast("subRd");
//                lists.addLast("naviInfo");
//            }else if (className.endsWith("RmcEntity")){
//                lists.addLast("strTime");
//                lists.addLast("chrStatus");
//                lists.addLast("strLat");
//                lists.addLast("chrLatDirection");
//                lists.addLast("strLon");
//
//                lists.addLast("chrLonDirection");
//                lists.addLast("dSpeed");
//                lists.addLast("dAzimuth");
//                lists.addLast("strDate");
//                lists.addLast("dDeclination");
//
//                lists.addLast("chrDeclDirection");
//                lists.addLast("chrMode");
//            }else if (className.endsWith("MssEntity")){
////				lists.addLast("charLocationMode");
//                lists.addLast("charWorkMode");
//                lists.addLast("intWorkModeContent");
//                lists.addLast("strPL1");
//                lists.addLast("charAccessRd1");
//
//                lists.addLast("strPL2");
//                lists.addLast("charAccessRd2");
//                lists.addLast("strPL3");
//                lists.addLast("charAccessRd3");
//            }else if (className.endsWith("DwaEntity")){
//                lists.addLast("strUserAddress");
//                lists.addLast("chrLocationState");
//                lists.addLast("byteMeasHighMode");
//                lists.addLast("chrAltitudeIndicate");
//                lists.addLast("strAltitude");
//                lists.addLast("strAntenna");
//                lists.addLast("strPressure");
//                lists.addLast("strTemperature");
//                lists.addLast("shReqFrequency");
//            }else if (className.endsWith("PkyEntity")){
//                lists.addLast("intWeekCount");
//                lists.addLast("strId");
//                lists.addLast("strKey");
//                lists.addLast("strParamB1");
//                lists.addLast("strParamB2");
//                lists.addLast("strParamB3");
//            }else if (className.endsWith("PmuEntity")){
//                lists.addLast("intBd");
//                lists.addLast("strValidStartDate");
//                lists.addLast("strValidEndDate");
//            }else if (className.endsWith("ZdaEntity")){
//                lists.addLast("strUTC");
//                lists.addLast("intDay");
//                lists.addLast("intMouth");
//                lists.addLast("intYear");
//                lists.addLast("iniTimezoneHour");
//                lists.addLast("intTimezoneMinute");
//
//            }
//
//        }
//        return lists;
//    }
//
//    /**
//     * 功能：发送得到的指令
//     *
//     * @param bdString
//     * @return
//     */
//    public static String getMsgOrder(String bdString) {
//        // int startIndex = bdString.indexOf(START_STR + SYMBOL);
//
////		int startIndex = bdString.indexOf(START_STR + SYMBOL_RECEVIED);
//        int startIndex = getBdStrStartIndex(bdString);
//        if(startIndex<0){
//            return null;
//        }
//
//        // int endIndex = bdString.indexOf(STAR);
//        int endIndex = bdString.lastIndexOf(STAR);
//        if(endIndex<0){
//            endIndex = bdString.length();
//        }
//
//        String[] split = bdString.substring(startIndex + 3, endIndex).split(",");
//
//        return split[0];
//    }
//
//    /**
//     * 功能:获取经度或纬度的北斗协议中指定的yyyyy.yy（经度）格式或llll.ll（纬度）格式
//     *
//     * @param dDegree
//     *            经度或纬度，以度表示
//     * @param intDegreeDigit
//     *            度的位数，经度为3，纬度为2
//     * @return yyyyy.yy格式或llll.ll格式
//     * @author: LiangYong
//     * @date:2015年1月10日上午10:05:48
//     */
//    private static String getBdFormatLonLat(double dDegree, int intDegreeDigit) {
//        if (intDegreeDigit != 3 && intDegreeDigit != 2) {
//            return null;
//        }
//        StringBuffer buffer = new StringBuffer();
//        String[] dsDegree = String.valueOf(dDegree).split("\\.");
//
//        // 取度的整数部分，转为yyyyy.yy（经度）格式时，不足三位数时需补齐三位数，即yyyyy.yy格式的前三位
//        // 转为llll.ll（纬度）格式时，不足两位数时需补齐两位数，即llll.ll格式的前两位
//        int nDegree;
//        try {
//            nDegree = Integer.valueOf(dsDegree[0]);
//        } catch (Exception e) {
//            nDegree = 0;
//        }
//        if (intDegreeDigit == 3) {
//            buffer.append(getFormatNumber(nDegree, "000"));
//        } else if (intDegreeDigit == 2) {
//            buffer.append(getFormatNumber(nDegree, "00"));
//        }
//
//        try {
//            double dMin = Double.parseDouble("0." + dsDegree[1]);
//            dMin = dMin * 60; // 由度小数点后的数字转为分
//            DecimalFormat format = new DecimalFormat("0.#####");
//            String strMinF = format.format(dMin);
//            String[] dsMin = String.valueOf(strMinF).split("\\.");
//
//            // 取分的整数部分，并不足两位时需补齐两位数，即yyyyy.yy格式的第4，5位或llll.ll格式的第3，4位
//            int nMin;
//            try {
//                nMin = Integer.valueOf(dsMin[0]);
//            } catch (Exception e) {
//                nMin = 0;
//            }
//            buffer.append(getFormatNumber(nMin, "00"));
//
//            // 处理分的可变长度部分，即yyyyy.yy格式的.yy部分或llll.ll的.ll部分
//            DecimalFormat formatw = new DecimalFormat("00000");
//            String strMin = formatw.format(Long.parseLong(dsMin[1]));
//            buffer.append("." + strMin);
//        } catch (Exception e) {
//        }
//        return buffer.toString();
//    }
//
//    /**
//     * 功能:获得yyyyy.yy格式的北斗经度 ,前三位为度，其余的为分
//     *
//     * @return
//     * @param dLongitude
//     *            用度表示的经度
//     * @author: LiangYong
//     * @date:2015年1月9日下午3:45:50
//     */
//    public static String getBdFormatLongitude(double dLongitude) {
//        return getBdFormatLonLat(dLongitude, 3);
//    }
//
//    /**
//     * 功能:获得llll.ll格式的北斗纬度 ,前两位为度，其余的为分
//     *
//     * @return
//     * @author: LiangYong
//     * @param dLatitude
//     *            用度表示的纬度
//     * @date:2015年1月9日下午3:47:03
//     */
//    public static String getBdFormatLatitude(double dLatitude) {
//        return getBdFormatLonLat(dLatitude, 2);
//    }
//
//    /**
//     *
//     * 功能:获得yyyyy.yy格式的北斗经度
//     *
//     * @param lon
//     * @return
//     * @author: YangKang
//     * @date:2014-8-15下午5:10:38
//     */
//    public static String getLon(double lon) {
//        StringBuffer buffer = new StringBuffer();
//        int intLon = (int) lon;
//        String[] arr = (lon + "").split(intLon + "");
//        String zhengshu = transformValue(intLon + "", "strLon");
//        buffer.append(zhengshu).append(arr[1]);
//        return buffer.toString();
//    }
//
//    /**
//     *
//     * 功能: 获得llll.ll格式的北斗纬度
//     *
//     * @param lat
//     * @return
//     * @author: YangKang
//     * @date:2014-8-15下午5:11:16
//     */
//    public static String getLat(double lat) {
//        StringBuffer buffer = new StringBuffer();
//        int intLat = (int) lat;
//        String[] arr = (lat + "").split(intLat + "");
//        String zhengshu = transformValue(intLat + "", "strLat");
//        buffer.append(zhengshu).append(arr[1]);
//        return buffer.toString();
//    }
//
//    private static String transformValue(String zs, String type) {
//        int length = zs.length();
//        StringBuffer buffer = new StringBuffer();
//        switch (length) {
//            case 1:
//                if (type.equals("strLat")) {
//                    buffer.append("000").append(zs);
//                } else if (type.equals("strLon")) {
//                    buffer.append("0000").append(zs);
//                }
//                break;
//            case 2:
//                if (type.equals("strLat")) {
//                    buffer.append("00").append(zs);
//                } else if (type.equals("strLon")) {
//                    buffer.append("000").append(zs);
//                }
//                break;
//            case 3:
//                if (type.equals("strLat")) {
//                    buffer.append("0").append(zs);
//                } else if (type.equals("strLon")) {
//                    buffer.append("00").append(zs);
//                }
//                break;
//            case 4:
//                if (type.equals("strLat")) {
//                    buffer.append(zs);
//                } else if (type.equals("strLon")) {
//                    buffer.append("0").append(zs);
//                }
//                break;
//            case 5:
//                if (type.equals("strLon")) {
//                    buffer.append(zs);
//                }
//                break;
//            default:
//                buffer.append("error");
//                break;
//        }
//        return buffer.toString();
//    }
//
//    /***
//     *
//     * 功能: 获取hhmmss.ss格式的北斗时间
//     *
//     * @return
//     * @author: YangKang
//     * @date:2014-8-15下午5:19:16
//     */
//    public static String getBeidouTime() {
//        Date date =  new Date();
//        SimpleDateFormat format = new SimpleDateFormat("HHmmss.SS",Locale.getDefault());
//        return format.format(new Date(date.getTime()- (long)8 * 60 * 60 * 1000));
//    }
//
//    /***
//     *
//     * 功能:获取校验码 对字符串所有字符的8位执行XOR（异或）运算
//     *
//     * @param msgBody
//     *            消息内容
//     * @return
//     * @author: YangKang
//     * @date:2014-8-18上午10:16:12
//     */
//    public static String getHH(String msgBody) {
//        byte[] bytes = msgBody.getBytes();
//        byte bte = 0x00;
//        for (int j = 0; j < bytes.length; j++) {
//            bte ^= (byte) (bytes[j]);
//        }
//        String result = BinaryToHexString(bte);
//        return result;
//    }
//
//    /***
//     *
//     * 功能:校验北斗短报文
//     *
//     * @param bdString
//     * @return
//     * @author: YangKang
//     * @date:2014-8-15下午5:32:30
//     */
//    public static boolean checkout(String bdString) {
//        try {
//            int bdCommHeadIndex = bdString.indexOf(START_STR);
//            int starIndex = bdString.indexOf(STAR);
//            // int endIndex = bdString.indexOf(END_STR);
////			int starIndex = bdString.lastIndexOf(STAR);
//            // int endIndex = bdString.lastIndexOf(END_STR);
//            String hh = bdString.substring(starIndex + 1, starIndex + 3);
//            String msgBody = bdString.substring(bdCommHeadIndex + 1, starIndex);
//            String calHH = getHH(msgBody);
//            if (calHH.equals(hh)) {
//                return true;
//            }
//        } catch (Exception e) {
//            Logger.getInstance().w("BeiouUtils", "checkout()异常。");
//        }
//        return false;
//    }
//
//    /***
//     *
//     * 功能: 将一个字节转换为十六进制 ，将16进制的高4位和低4位转换成两个ASCII字符（0--9，A--F）。
//     *
//     * @param b
//     * @return
//     * @author: YangKang
//     * @date:2014-8-18上午10:16:57
//     */
//    public static String BinaryToHexString(byte b) {
//        String hex = "";
//        // 字节高4位
//        hex = String.valueOf(HEXSTR.charAt(((b & 0xF0) >> 4)));
//        // 字节低4位
//        hex += String.valueOf(HEXSTR.charAt(b & 0x0F));
//
//        return hex;
//    }
//
//}
//
